// 为什么要把emit,props 这些功能拆开呢?

// 每太看懂emit的逻辑,此处梳理一下
// emit 是一个函数,会在 创建组件实例时,把emit 函数赋给组件实例对象的一个属性.

// @ts-ignore
import {camelize, toHandlerKey} from "../shared";

/**
 *
 * @param instance 绑定的子组件实例
 * @param event 发射的事件类型
 * @param args 需要传递的那些参数
 */
export function emit(instance, event, ...args) {
    const {props} = instance;
    //  转化传入的key, 比如add->onAdd,add-foo->onAddFoo
    const toHandlerName = toHandlerKey(camelize(event));
//     TPP 开发技巧
//     先写一个特定的行为,再重构成通用的行为
//     const handler = props["onAdd"];
//     const handler = props["on" + capitalize(event)];
    const handler = props[toHandlerName];
    // 如果handler存在,那么就调用 handler
    handler && handler(...args);


}